Object-Oriented Methodologies


Oriented programming has caused a number of significant changes in software engineering, most significantly changing the focus from a program's functions to its data (objects). One of the side effects has been a need for new software development methodologies.

A methodology is basically a set of procedures for gathering requirements, analyzing and (sometimes) designing a program. Most methodologies are associated with a form of graphical notation and with several types of charts used to illustrate different aspects of a program. Methodologies are, for the most part, language and hardware independent, but have traditionally been more occupied with the functions of a program than its data. In the last few years, a number of object oriented methodologies have hit the marketplace, claiming to mesh better with object oriented languages such as C++ and Smalltalk than the old fashioned methodologies do.

Why use a methodology? Many programmers, and the organizations that employ them, are impatient with the requirements and analysis phase of a project and handle it casually, or not at all, plunging directly into coding. Frequently, the result is either that the program does not match the user's requirements, or that the requirements gathering, analysis, design and coding are all happening simultaneously--an expensive, sloppy and potentially disastrous way to build software.

A methodology is a way of enforcing self-discipline and ensuring a rigorous and thorough analysis of the problem at hand. It also acts as a check-list making sure nothing has been missed. Finally, since information is usually displayed in a graphic format, problems and concerns may become more easily apparent than they would be from reading an old-fashioned, "Victorian novel" text specification.

Why use an object oriented methodology? If you are going to be working in an object oriented language such as C++ or Smalltalk, you risk losing much of the flexibility and function of these languages, such as inheritance, encapsulation and polymorphism, if you do not start taking these features into account at the analysis and design phase. If you use a traditional methodology, you may wind up with a program that does not truly make use of OO concepts, even though written in an object oriented language.

I evaluated four of the leading OO methodologies: Booch, Coad-Yourdon, Rumbaugh and Shlaer-Mellor. Although others exist, we selected these four for the following reasons:

Each methodology is published and supported by a company committed to improving it, and available to consult and train in its implementation.
Each is supported by one or more CASE tools.
Each is explained in a currently available book written by the creator of the methodology.
Each has gained some commercial acceptance.

We used the following criteria for evaluation:

Is the methodology simple enough to explain to an end user, even a relatively non-technical one?
Does it support both the analysis and design phases of the project?
Is it powerful enough to support detailed design of the software?
How many different types of charts are supported or required?

Booch -is a design rather than an analysis methodology, better suited to the nuts and bolt issues than to the initial gathering of requirements. By reason of its power and complexity, Booch and its associated charts would be difficult to explain to a nontechnical end user.

Coad-Yourdon - support analysis much more strongly than design. Coad-Yourdon tries to model entire systems in one form of chart, showing classes, objects, their attributes and services, and their interrelationships. This chart will not be difficult to grasp for anyone who has done Entity-Relationship diagramming in database design, and seemed easiest, of all the four methodologies, to explain to a nontechnical end user. (Coad-Yourdon also endorses the use of state transition diagramming for real time systems but pays this approach much less attention than some of its competitors.)
Message connections between objects are shown on the same chart, whereas other methodologies seem to prefer to handle program functions in a separate diagram. At the analysis phase, and especially when communicating with an end user, there is a lot to be said for representing as much as possible, as clearly as possible, in a single type of diagram.

Rumbaugh - supports three types of charts, Object, Dynamic and Functional.
The dynamic chart is our old friend the state transition diagram.
The functional chart is the dreaded data flow diagram that some of the other methodologies seem proud to have left behind with the "old-fashioned" approaches.
The object chart is quite similar to Coad's, but does not handle message connections between objects, so that the Object and Functional diagrams, at a minimum, must be read together to understand the system.

Shlaer-Mellor - supports object, state transition and data flow diagrams. Like the others, except for Coad-Yourdon, message connections are not handled on the object chart.
The object chart is fairly similar again to entity relationship diagramming and the Coad and Rumbaugh charts.

In the end, which methodology you use may be less important than that you are using one at all. Any of these approaches will help organize your thoughts and coordinate your attack on the "problem domain".